Softmax 回归
Softmax 回归是什么?
Softmax 回归,也称为多类别逻辑回归或多类别分类,是一种用于处理多类别分类问题的机器学习模型。它是逻辑回归在多类别情况下的扩展。Softmax 回归通常用于将输入数据分为三个或更多的类别,其中每个类别是互斥的,即一个样本只能属于其中一个类别。
Softmax 回归的主要思想是通过一个 softmax 函数将输入的线性组合转化为各个类别的概率分布。具体来说,对于给定的输入特征向量 ,Softmax 回归首先计算每个类别的分数(也称为 logits),然后使用 softmax 函数将这些分数转换为概率分布。
Softmax 函数的定义如下:
对于 个类别,给定输入特征向量 ,Softmax 函数计算每个类别 的概率 为:
其中, 表示类别 的分数, 是自然对数的底数(欧拉数), 表示所有类别的分数的指数总和。Softmax 函数将分数映射为概率,确保所有类别的概率之和为 1。
Softmax 回归模型的训练目标是最大化训练数据的似然概率,即找到一组模型参数,使得观察到的训练数据在模型下的概率最大。通常使用交叉熵损失函数来衡量模型输出的概率分布与实际标签之间的差距。
Softmax 回归在深度学习中被广泛应用于多类别分类任务,例如图像分类、自然语言处理中的词性标注和命名实体识别等任务。它是理解深度学习中分类问题的基础,并通常作为神经网络的输出层之一。
尽管 Softmax 是一个非线性函数,但 Softmax 回归的输出仍然由输入特征的仿射变换决定。 因此,Softmax 回归是一个线性模型(linear model)。
独热编码(one-hot encoding)
这里介绍一种常用的表示分类数据的方法:独热编码(one-hot encoding)。
独热编码(One-Hot Encoding)是一种用于表示分类数据的编码方法。它将每个类别映射成一个二进制向量,其中只有一个元素为 1,表示该类别的存在,而其他元素都为 0,表示该类别的缺失。这个编码方法的名称来源于向量中只有一个 "hot"(值为 1)的元素。
独热编码的主要优点是能够将分类数据转换为机器学习模型能够处理的数值形式,而且不引入类别之间的偏序关系。每个类别之间是相互独立的,不具有大小或顺序关系,这对于许多机器学习算法来说是非常重要的。
以下是独热编码的示例:
假设有一个分类特征 "颜色",可能的类别包括 "红色"、"蓝色" 和 "绿色"。使用独热编码,可以将这些类别转换为以下形式:
- "红色" 可编码为 [1, 0, 0]
- "蓝色" 可编码为 [0, 1, 0]
- "绿色" 可编码为 [0, 0, 1]
这样,每个类别都被表示成一个长度等于类别数量的二进制向量,其中只有一个元素为 1,其他元素为 0。
独热编码在许多机器学习任务中广泛应用,特别是在分类问题中,它能够有效地处理分类特征,并确保模型在训练过程中不会引入不正确的偏好或顺序信息。在训练深度学习模型时,通常会将分类特征进行独热编码,以便将其输入到模型中。
仿射函数
为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。 每个输出对应于它自己的仿射函数。
仿射函数是一种数学函数,它表示为一个线性变换(线性映射)后加上一个平移(平移向量)的组合。仿射函数具有以下形式:
其中:
- 表示仿射函数的输出,通常是一个向量。
- 表示输入向量。
- 表示一个矩阵,称为线性变换矩阵(或权重矩阵),用于对输入向量进行线性变换。
- 表示一个向量,称为平移向量,它被添加到线性变换的结果中。
仿射函数的特点是它保持了向量空间中的线性关系,即它保留了向量的平行性质(可以理解仿射函数是一个高维线性变换)。线性变换部分由矩阵 决定,平移部分由向量 决定。
以下是一个简单的二维仿射函数的例子:
假设 是一个二维输入向量,仿射函数可以表示为:
其中, 是线性变换矩阵, 是平移向量。这个仿射函数将输入向量 映射到输出向量 ,并且保持了线性关系。
在深度学习中,仿射函数常常用于神经网络的全连接层(也称为仿射层或线性层),其中线性变换部分由权重矩阵表示,平移部分由偏置向量表示。这些仿射层用于实现输入特征的线性组合,是神经网络中非常重要的组成部分。
仿射函数的应用示例
假设我们有一个分类问题,输入数据具有四个特征(或属性),我们希望将输入数据分为三个不同的类别。我们可以使用仿射函数来表示这个分类问题的一部分。
首先,我们定义一个输入向量 ,其中 分别是四个特征的值。
接下来,我们定义一个权重矩阵 ,该矩阵用于进行线性变换,将输入特征映射到一个中间的向量空间,其中每个特征都与一些权重相关联。权重矩阵的形状取决于我们希望中间向量空间的维度是多少。假设我们选择一个 的权重矩阵:
其中, 表示权重矩阵的元素。
接下来,我们定义一个偏置向量 ,它是一个长度为 3 的向量,用于进行平移操作:
然后,我们可以使用仿射函数将输入向量 映射到一个中间向量 ,如下所示:
现在, 是一个长度为 3 的向量,它包含了中间向量空间的信息。我们可以将 作为 softmax 函数的输入,以获得每个类别的概率分布。例如:
其中, 是中间向量 的元素。
这样,通过仿射函数和 softmax 函数的组合,我们可以将具有四个特征的输入数据映射到三个可能的输出类别,并获得每个类别的概率分布,以进行多类别分类。这就是仿射函数在多类别分类问题中的应用示例。
可以用神经网络图来描述这个计算过程。与线性回归一样,softmax 回归也是一个单层神经网络。
全连接层
全连接层(Fully Connected Layer),通常简称为 FC 层,也被称为仿射层(Affine Layer)或密集层(Dense Layer),是深度神经网络中的一种基本层结构。全连接层的主要作用是实现输入数据到输出数据的线性变换,并且在这个过程中每个输入单元都与每个输出单元相连接,从而允许网络学习输入数据的复杂线性组合。
全连接层的工作原理如下:
输入数据:全连接层接收一个由多个特征组成的输入数据向量。这个向量可以来自于前一层的输出或者网络的输入。
线性变换:每个输入特征与一组权重相乘,然后对这些乘积进行求和,得到一个中间的线性变换结果。这个过程可以表示为仿射函数。如果有多个输出单元,那么就会有多组权重和多个中间结果。
激活函数:通常,在全连接层的线性变换之后,会应用一个非线性激活函数,例如 ReLU(Rectified Linear Unit)或 Sigmoid 函数,将线性组合的结果转化为非线性的输出。这增加了模型的表达能力,使其能够捕捉更复杂的关系。
输出结果:最终,全连接层的输出是经过激活函数处理的结果,可以作为下一层的输入,或者作为神经网络的最终输出(例如分类问题中的类别概率)。
全连接层通常用于深度神经网络的中间层和输出层。在中间层,它们可以实现复杂的特征变换和抽象表示,有助于提取数据中的高级特征。在输出层,全连接层通常用于多类别分类问题的 softmax 回归层,用于输出类别概率分布。
全连接层的参数开销
全连接层的参数开销主要取决于两个因素:
输入特征的数量:全连接层的参数数量与输入特征的数量成正比。如果输入特征的数量较多,那么连接每个输入特征与每个输出单元的权重参数数量会相应增加。
输出单元的数量:全连接层的参数数量也与输出单元的数量成正比。如果需要更多的输出单元,那么需要更多的权重参数来连接输入和输出。
全连接层的参数数量可以用以下数学公式表示:
假设:
- 输入特征数量为 ,
- 输出单元数量为 。
那么,全连接层的参数数量 可以计算如下:
其中,第一项 表示连接每个输入特征与每个输出单元的权重参数数量,第二项 表示偏置参数数量(每个输出单元一个偏置)。
这个公式描述了全连接层的参数开销,它与输入特征数量和输出单元数量成正比。增加输入特征或输出单元的数量将增加全连接层的参数数量,从而增加模型的复杂度。
由于全连接层的参数数量通常较大,因此它们在深度神经网络中可能会导致较高的模型复杂度和计算成本。为了减少参数开销和防止过拟合,可以采用一些技巧,例如使用正则化方法(如 L1 或 L2 正则化)、使用批量归一化(Batch Normalization)等。
此外,通常在深度学习中,全连接层会被卷积层(Convolutional Layer)等更具有参数共享性质的层所替代,特别是在处理图像数据时。卷积层的参数数量较少,因为它们在不同位置共享权重,因此能够更有效地处理大规模的输入数据。全连接层则更适用于一些具有较小输入特征数量和输出单元数量的任务,如文本分类或情感分析等。
小批量样本的矢量化
为了提高计算效率并充分利用GPU,我们通常会对小批量样本的数据执行矢量化计算。以下是一个具体的例子,假设我们有一个小批量包含两个样本的情况,每个样本有三个特征。我们将执行矢量化的前向传播计算,以演示如何同时处理多个样本。
假设小批量样本的输入数据为 ,其中 是一个 的矩阵,表示两个样本和三个特征:
现在,我们有一个全连接层,其权重矩阵为 ,偏置向量为 。我们的目标是计算整个小批量的输出。
前向传播:
首先,计算线性变换部分:
其中, 是一个 的矩阵,表示两个样本的中间线性变换结果。
激活函数:
接下来,应用激活函数:
其中, 也是一个 的矩阵,表示两个样本的激活函数结果。
通过矢量化计算,我们一次性处理了整个小批量的数据,包括两个样本的输入和输出。这样可以充分利用GPU的并行计算能力,提高计算效率。
需要注意的是,这只是前向传播的示例。在实际训练中,还需要执行反向传播来计算梯度,并使用梯度下降等优化算法来更新模型参数。整个训练过程也可以通过矢量化计算来加速。
损失函数
接下来,我们需要一个损失函数来度量预测的效果。 我们将使用最大似然估计,这与在线性回归中的方法相同。
对数似然是什么?
对数似然(Log-Likelihood)是统计学和机器学习中的一个重要概念,通常用于估计模型参数或比较不同模型的好坏。它是似然函数的自然对数,用于将概率分布模型与观测数据之间的拟合程度量化。
"拟合程度" 是指模型对观测数据的拟合程度或适应性。它表示了模型对实际数据的匹配程度,也可以理解为模型对数据的描述或解释程度。
似然函数是一个关于模型参数的函数,用于描述观测数据在给定模型下的概率分布。对于一组观测数据,似然函数表示为 ,其中 是模型参数, 是观测数据。似然函数告诉我们,在给定模型参数 下,观测数据 出现的概率。
对数似然是似然函数的自然对数,通常表示为 。使用对数似然的主要原因之一是它的计算更加稳定,尤其当似然函数中涉及大量数据时,避免了数值下溢的问题。另一个原因是对数似然可以将概率乘法转换为概率加法,从而简化计算。
在机器学习中,通常的目标是通过最大化对数似然来估计模型的参数。这意味着找到能够使观测数据在给定模型下的概率最大化的参数值,也就是找到能够最好地拟合数据的模型参数。
举个简单的例子,如果我们有一个二项分布的模型,表示成功和失败的概率,观测到一系列成功和失败的事件,我们可以使用对数似然来估计成功的概率,从而找到最适合数据的模型参数。
总之,对数似然是用于估计模型参数和评估模型拟合程度的关键工具,它在统计学和机器学习中都有广泛的应用。
对数似然的具体使用例子
在 softmax 回归中,对数似然(log-likelihood)通常用于定义损失函数,以及在训练过程中寻找最佳模型参数。以下是一个具体的例子,展示如何在 softmax 回归中使用对数似然来计算损失和进行参数估计。
假设我们有一个分类问题,其中有 个类别(类别编号从 到 )。我们的目标是对输入样本 分类为其中一个类别。在 softmax 回归中,我们通过以下步骤来进行分类:
计算每个类别的分数(未归一化的概率),这些分数用于衡量样本属于每个类别的可能性。对于第 个类别的分数记为 ,可以使用线性变换得到:
其中, 是与第 个类别相关联的权重向量, 是输入样本, 是偏置项。
将分数转化为概率。为了将分数转化为概率,我们使用 softmax 函数,它将分数转化为各个类别的概率值。第 个类别的概率 可以表示为:
这里, 表示 的指数, 是所有类别的分数指数之和,用于归一化分数以确保它们构成概率分布。
计算对数似然。给定观测数据 和真实类别 ,对数似然函数可以表示为:
这里, 是正确类别 的分数, 是所有类别 的分数。
定义损失函数。为了训练模型,我们通常使用负对数似然(Negative Log-Likelihood)作为损失函数。它可以表示为:
目标是最小化这个损失函数,以便找到最佳模型参数 和 。
在训练过程中,通常使用批量随机梯度下降(Batch Stochastic Gradient Descent)等优化算法来最小化损失函数,从而估计模型的参数。这样,模型就能够更好地拟合观测数据,并进行分类任务。
熵和交叉熵
在统计学中,熵可以用来表示数据的分布或随机变量的不确定性。例如,熵越高,表示数据的分布越分散,越难以预测。在决策树等机器学习算法中,熵常用来度量数据集的纯度,用于选择最佳的分割特征。
熵的计算方式取决于随机变量的概率分布。以下是计算离散随机变量熵的一般步骤:
首先,考虑一个离散随机变量 ,它可以取 个可能的取值,分别为 。
对于每个可能的取值 ,计算它的概率 。这些概率值必须满足概率分布的性质,即它们是非负的,并且总和等于1。
使用以下公式计算熵 :
其中, 通常是以2为底或以e(自然对数)为底的对数,具体取决于所使用的信息单位。如果使用2为底的对数,熵的单位通常被称为比特(bit);如果使用e为底的对数,熵的单位通常被称为奈特(nat)。
最终,得到的熵值 表示了随机变量 的不确定性或信息量。熵越高,表示随机变量的取值越不可预测,不确定性越大;熵越低,表示随机变量的取值越可预测,不确定性越小。
需要注意的是,熵的计算假设各个可能取值的概率是已知的。在实际应用中,熵常用于衡量随机变量的不确定性,以帮助理解数据的分布和特性。
交叉熵(Cross-Entropy)是一个在信息理论和机器学习中常用的概念,用于衡量两个概率分布之间的差异或不确定性。它通常用于以下两种情况:
信息论中的交叉熵:在信息论中,交叉熵用于比较两个概率分布之间的差异。给定两个概率分布 和 ,交叉熵 定义为:
其中, 表示随机变量的可能取值, 和 分别是这两个分布在 处的概率。交叉熵衡量了使用概率分布 来编码来自概率分布 的信息所需的平均比特数。当 和 完全相等时,交叉熵达到最小值为0,表示两个分布完全一致。
机器学习中的交叉熵损失:在机器学习中,交叉熵损失函数常用于分类任务的模型评估。给定一个样本的真实标签分布 (通常是独热编码的形式,其中一个类别概率为1,其余为0),以及模型产生的预测标签分布 (通常是模型输出的概率分布),交叉熵损失 定义为:
其中, 表示真实标签分布中第 个类别的概率, 表示模型的预测分布中第 个类别的概率。交叉熵损失用于衡量模型的预测与真实标签之间的差异,帮助模型在训练过程中调整参数以提高预测的准确性。最小化交叉熵损失等价于最大化似然,从而使模型更好地拟合数据。
总之,交叉熵是一个重要的信息论概念,在机器学习中广泛应用于分类问题的损失函数,用于衡量概率分布之间的差异或模型的拟合程度。
交叉熵损失
Softmax 回归使用的损失函数通常是交叉熵损失函数(Cross-Entropy Loss),也称为负对数似然损失函数(Negative Log-Likelihood Loss)。交叉熵损失函数用于衡量模型的预测与真实标签之间的差异,特别适用于多类别分类问题。
对于 Softmax 回归,假设有 个可能的类别,每个样本的真实标签表示为一个由 个元素组成的概率分布向量 ,其中 表示样本属于第 个类别的概率,而其他元素均为 。模型的预测结果表示为一个由 个元素组成的概率分布向量 ,其中 表示模型预测样本属于第 个类别的概率。
交叉熵损失函数的数学表达式如下:
其中, 表示交叉熵损失, 是真实标签中的第 个类别的概率, 是模型预测的第 个类别的概率。
交叉熵损失函数的计算基于真实标签和模型预测之间的对数差异。当模型的预测接近真实标签时,交叉熵损失趋近于零。当模型的预测与真实标签不一致时,损失增大,推动模型更好地拟合数据。
Softmax 回归的训练目标通常是最小化交叉熵损失,以便提高分类模型的性能。通过调整模型的权重和偏置项,模型可以学习到正确的分类决策边界,以最小化损失函数。
交叉熵损失函数中为什么取负号
交叉熵损失函数中为什么取负号,是为了将最小化损失的问题转化为最大化似然的问题,这是一个常见的约定。
在机器学习和统计学中,通常使用似然来描述模型在给定数据下的拟合程度。似然表示了观测数据在模型参数下的条件概率,越大表示数据对模型参数的拟合越好。
考虑到这一点,我们可以将分类任务看作是在最大化观测数据在给定模型参数下的似然。然而,通常的优化问题是最小化损失函数,因此需要将最大化似然问题转化为最小化损失问题。为了做到这一点,可以取似然的负对数,这就是为什么在交叉熵损失函数中使用了负号。
具体来说,如果我们考虑多类别分类任务,每个样本有一个真实的标签分布 ,而模型产生的预测分布为 。最大化似然意味着我们希望真实标签的概率分布与模型的预测概率分布尽量接近,因为我们希望模型尽可能地拟合真实数据。但是,在优化问题中,通常是最小化目标函数,因此我们需要考虑负对数似然(Negative Log-Likelihood):
这个负对数似然函数是交叉熵损失函数,最小化它等价于最大化似然,因此它被广泛用于分类问题的优化。所以,负号的引入是为了将最大似然估计问题转化为最小化损失函数的问题。
交叉熵损失函数工作例子
让我们以一个实际的分类问题为例,来说明交叉熵损失是如何工作的。假设我们有一个三类别的图像分类任务,其中类别分别是猫、狗和鸟。我们的目标是训练一个模型来对输入图像进行分类。
现在,考虑一个图像,它属于猫这一类别。在训练过程中,我们的模型会产生一个概率分布,表示该图像属于每个类别的概率。这个概率分布可以用一个三维向量来表示,例如 ,其中:
- 第一个元素 表示模型认为这个图像是猫的概率为 。
- 第二个元素 表示模型认为这个图像是狗的概率为 。
- 第三个元素 表示模型认为这个图像是鸟的概率为 。
但是,由于这个图像实际上是猫,因此真实的标签分布为 ,表示这个图像属于猫的概率为 ,而其他类别的概率为 。
现在,我们可以使用交叉熵损失来衡量模型的预测与真实标签之间的差异。根据交叉熵损失函数的定义:
其中 表示类别数, 是真实标签分布, 是模型的预测分布。
在这个例子中,真实标签分布 ,而模型的预测分布 。我们可以计算交叉熵损失如下:
这个值表示模型的预测与真实标签之间的差异。在训练过程中,我们的目标是最小化交叉熵损失,使得模型的预测尽可能接近真实标签。当交叉熵损失接近零时,表示模型的预测与真实标签非常接近,分类准确性较高。这就是交叉熵损失在分类任务中的工作原理。通过不断优化模型的权重和偏置项,我们可以使模型更好地拟合数据。